package com.wjm.http;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

/**
 * Data:2022年08月14日
 * Author:wjm
 * Content:
 *
 *     该类用于存放所有和 Http协议相关的固定不变，会被重用的内容
 *
 */
public class HttpContext {
    //设置一个集合，可以根据文件后缀名找mime类型
    private static Map<String,String> mimeMapping = new HashMap<>();

    static {
        initMimeType();
    }


    /**
     * 用于给mimeMapping集合初始化
     */
    private static void initMimeType()  {
        /*
        文件类型       Content-Type表示的值
           html          text/html
           css           text/html
           js            application/javascript
           png           image/png
           jif           image/jif
           jpg           image/jpg
        */
        //mimeMapping.put("html","text/html");
        //mimeMapping.put("css","text/css");
        //mimeMapping.put("js","application/javascript");
        //mimeMapping.put("png","image/png");
        //mimeMapping.put("jif","image/jif");
        //mimeMapping.put("jpg","image/jpg");

        //TODO 从config下的web.xml配置文件中读取到所有的文件类型，和对应的Content-Type表示的值，并存入到mimeMapping集合中
        //读取config/web.xml文件中的内容
        File file = new File("./config/web.xml");
        Document document = null;
        try {
            document = Jsoup.parse(file,"utf-8");
        } catch (IOException e) {
            e.printStackTrace();
        }

        //通过document对象获取指定标签的集合对象
        Elements elements = document.getElementsByTag("mime-mapping");
        //遍历集合中的元素对象
        for (Element element : elements){
            //获取每个标签元素中的文本内容
            String text = element.text(); //如 "html[空格]text/html"
            //通过空格分割文本内容
            String[] datas = text.split("\\s");
            String key = datas[0];
            String value = datas[1];
            //将文件后缀名，和其对应的Content-Type表示的值存入mimeMapping集合
            mimeMapping.put(key,value);
        }
        //System.out.println(mimeMapping);
        //System.out.println(mimeMapping.size());


    }


    /**
     * 给定文件的后缀名，返回文件后缀名对应的Content-Type表示的值
     * @param key 传入文件后缀名
     * @return 返回文件后缀名对应的Content-Type表示的值
     */
    public static String getMimeType(String key){
        return mimeMapping.get(key);
    }


}
